home *** CD-ROM | disk | FTP | other *** search
- program ShadeBob2;
-
- uses crt;
-
- var Pal : array[0..767] of byte;
- x1,y1,x2,y2 : word; { X- und Y-Koords der beiden Bobs }
- incx1,incy1,incx2,incy2 : shortint; { Inkrementationsparameter }
-
- procedure SetPalette;assembler; { Setzt die Palette in Pal }
- asm
- mov dx,3C8h
- xor al,al
- out dx,al
- mov cx,768
- mov dx,3C9h
- mov si,offset pal
- @Jmp1:
- lodsb
- out dx,al
- loop @Jmp1
- end;
-
- procedure RainbowPal; { Erstellt eine bunte Palette }
- var loop : integer;
-
- begin
- for loop := 0 to 31 do begin
- pal[loop*3] := loop * 2;
- pal[(63-loop)*3] := loop * 2;
- pal[(loop+64)*3+1] := loop * 2;
- pal[(127-loop)*3+1] := loop * 2;
- pal[(loop+128)*3+2] := loop * 2;
- pal[(191-loop)*3+2] := loop * 2;
- pal[(loop+192)*3] := loop * 2;
- pal[(loop+192)*3+1] := loop * 2;
- pal[(loop+192)*3+2] := loop * 2;
- pal[(255-loop)*3] := loop * 2;
- pal[(255-loop)*3+1] := loop * 2;
- pal[(255-loop)*3+2] := loop * 2;
- end;
- setpalette;
- end;
-
- procedure SetBob(x,y:word); { Setzt ein Bob an die Koords X,Y }
- var n1,n2 : byte;
-
- begin
- for n1 := 0 to 19 do { Hier werden in einem 20x20 Pixel großen Quadrat }
- for n2 := 0 to 19 do { alle Pixelwerte um 1 erhöht }
- mem[$A000:(n2+y)*320+n1+x] := mem[$A000:(n2+y)*320+n1+x] + 1;
- end;
-
-
- begin
- asm mov ax,13h; int 10h end;
- RainbowPal;
- randomize;
- x1 := random(280); { Zufällige X- und Y- Positionen für }
- y1 := random(160); { beide Bobs }
- x2 := random(280);
- y2 := random(160);
- incx1 := 1; { Bob 1 wird nach rechts und nach unten }
- incy1 := 1; { bewegt }
- incx2 := -1; { Bob 2 wird nach links und nach unten }
- incy2 := 1; { bewegt }
- repeat
- inc(x1,incx1); { Bob-Positionen verändern }
- inc(y1,incy1);
- inc(x2,incx2);
- inc(y2,incy2);
- if (x1 = 299) or (x1 = 0) then incx1 := -incx1; { Überprüfen, ob einer }
- if (y1 = 179) or (y1 = 0) then incy1 := -incy1; { der Bobs am Rand des }
- if (x2 = 299) or (x2 = 0) then incx2 := -incx2; { Screens ist, und wenn }
- if (y2 = 179) or (y2 = 0) then incy2 := -incy2; { ja dann Wert umkehren }
- SetBob(x1,y1); { Die beiden Bobs zeichnen }
- SetBob(x2,y2);
- until keypressed;
- readkey;
- asm mov ax,3; int 10h end;
- end.
-